package component

import (
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/Map"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/OS"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/OS/ShellUtils"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/periodTask"
)

type cleanCacheTask struct {
	statusMap map[string]interface{}
}

func (e *cleanCacheTask) TaskType() periodTask.TaskType {
	return periodTask.TaskShare
}

func (e *cleanCacheTask) SchedulePeriod() int64 {
	return 60
}

func (e *cleanCacheTask) Execute() {
	// windows版本没有对操作系统进行CleanCache的操作
	if OS.Type.IsWindows() {
		return
	}

	// 取出上次保存的进程内存大小
	buffCacheLast := Map.GetFloat64(e.statusMap, "OS buff/cache", 0.0)

	// 检查：内存的膨胀状况，是否缓超过了512M
	if buffCacheLast > 5.12e8 {
		return
	}

	// 释放缓存
	_, err := ShellUtils.ExecuteShell("echo 1 > /proc/sys/vm/drop_caches")
	if err != nil {
		return
	}

	// 获得释放后的缓存占用状况
	memInfo := OS.Sys.ReadMemInfo()
	buffCacheNew := Map.GetFloat64(memInfo, "ramBuffCache", 0.0)

	// 将本次占用状况保存下来
	Map.SetValue(e.statusMap, "OS buff/cache", buffCacheNew)
}
